"""
1、有这样的一个列表，深度不可知，列表里面还会嵌套列表，我想要把这个列表从左到右拼接成一个新的列表，且顺序不变
举例：[12,33,[11,22,33,[55,66,99]],[55,66]]
变成：[12, 33, 11, 22, 33, 55, 66, 99, 55, 66]
2、编写装饰器，为多个函数加上认证的功能（用户的账号密码）
 要求登录成功一次，后续的函数都无需输入用户名和密码
3、请实现一个装饰器，把函数的返回值+100然后返回
4、请实现一个装饰器，通过一次调用使函数重复执行5次
5、输入任意个字符串,分别实现从小到大输出和从大到小输出
6、接收n个数字，求这些参数数字的和
7、编写一个函数，实现数字的自增（从0开始，每调用一次，数字+1）
"""

# 1、有这样的一个列表，深度不可知，列表里面还会嵌套列表，我想要把这个列表从左到右拼接成一个新的列表，且顺序不变
# 举例：[12,33,[11,22,33,[55,66,99]],[55,66]]
# 变成：[12, 33, 11, 22, 33, 55, 66, 99, 55, 66]
"""
# list.extend() #打开追加 new_list = [12,33,11,22,33,[55,66,99],55,66]
# list.append() #直接追加 new_list = [12,33,[11,22,33,[55,66,99]],[55,66]]

def f_list(list1:list):
    # 定义一个空的列表用来接收想要返回结果内容
    result = []
    # 因为是列表的所有元素都要生成一个新的列表，所以进行for循环遍历
    # 如果i在list1中就进行for循环
    for i in list1:
        # 判断，如果i是个列表,打开追加
        if type(i) == list:
            result.extend(f_list(i))
        # 直接追加
        else :
            result.append(i)
    return result


old_list = [12,33,[11,22,33,[55,66,99]],[55,66]]
new_list = f_list(old_list)
print(new_list)
"""

# 3、请实现一个装饰器，把函数的返回值+100然后返回
"""
# 公共的
def 函数名(func):
    def 函数名1("参数可有可无"):
        逻辑
    return 函数名1

#私有的
@函数名
def 函数名2(参数有无都可以):
    你私有的实现逻辑
"""
# 读题说每执行一次就增加100，那么需要在解释器外定义一个变量并且初始化，在解释器中进行全局化 global 变量名
"""
# 在解释器外定义一个变量并且初始化
num = 0
def return_sum(func):
    def sum_100():
        # 全局化num
        global num
        # 每执行一次就增加100
        num += 100
        # 调用私有方法
        func()
        # 返回num,至此逻辑结束
        return num
    return sum_100
# 语法糖
@return_sum
def sum_1():
    print("计算结束")

print(sum_1())
print(sum_1())
"""
# 4、请实现一个装饰器，通过一次调用使函数重复执行5次
"""
def repeat(func):
    def repeat_in(n):
        for i in range(n):
            func()
    return repeat_in

@repeat
def output_fun():
    print("帮忙执行")

output_fun(9)
"""
# 5、输入任意个字符串,分别实现从小到大输出和从大到小输出

# 6、接收n个数字，求这些参数数字的和
# 第一张方法，定死输入:
# 求和方法：sum()
#函数写法
"""
def sum_num(*args):
    print(sum(args))
# 因为函数里面是print所有我在输结果的时候就可以直接调用方法
sum_num(1,2,3)
"""
"""
# 升级到解释器
def sum_num(func):
    def sum_num_r(*arg):
        func(*arg)
        return sum(arg)
    return sum_num_r

@sum_num
def sum_num_n(*arg):
    pass

print(sum_num_n(1,2,3))
"""
# 7、编写一个函数，实现数字的自增（从0开始，每调用一次，数字+1）
"""
num =0
def a_sum():
    def sum_0():
        global num
        num +=1 #与这个等价num = num + 1
        return num
    return sum_0
# print(a_sum()()) 等于 i=a_sum() print(i())
i = a_sum()
print(i())
print(i())
print(i())
print(i())
"""
